<?php
/**
 * PrynLib
 * @copyright 2007-2009 Prynel
 * @author Olivier ROGER <roger.olivier@gmail.com>
 * @category libPrynel
 * @package Validate
 * @version $Revision: 80 $
 */

/**
 * Factory de validateur
 * @category libPrynel
 * @package Validate
 * @version 1.0.0 
 * @author Olivier ROGER <roger.olivier@gmail.com>
 * @copyright  2007-2009 Prynel
 *       
 *
 */
class Validate_Validate
{
	/**
	 * Validateurs instanciés
	 *
	 * @var array
	 * @access private
	 */
	private $validators;
	
	/**
	 * Constructeur
	 *
	 */
	public function __construct()
	{
		$this->validators = array();
	}
	
	/**
	 * Ajoute un nouveau validateur
	 *
	 * @param string $nom Nom du validateur
	 * @param array $options Option possible pour le validateur
	 * @param string $message Message d'erreur personalisé
	 * @access public
	 * @return Validate_Validate
	 */
	public function addValidator($nom,$options=null,$message='')
	{
		if($this->validatorExist($nom))
		{
			$class = 'Validate_Validator_'.$nom;
			if(is_null($options))
				$objet = new $class();
			else
				$objet = new $class($options);
				
			if($message!='')
			{
				$objet->setMessage($message);
			}
			$this->validators[] = $objet;
			unset($objet);	
		}
		else
			throw new Util_ExceptionHandler('Validateur inconnu');
		return $this;
	}
	
	/**
	 * Validation de la valeur avec les différents validateurs
	 *
	 * @param string $value
	 * @access public
	 * @return mixed Retourne true si valide, message d'erreur sinon
	 */
	public function isValid($value)
	{
		foreach($this->validators as $validator)
		{
			if(!$validator->isValid($value))
			{
				return $validator->getError();
			}
				
		}
		return true;
	}
	
	/**
	 * Vérifie l'existance du validateur
	 *
	 * @param string $nom
	 * @return boolean
	 */
	private function validatorExist($nom)
	{
		return file_exists(dirname(__FILE__).'/Validator/'.$nom.'.class.php');
	}
}
 ?>